/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.srm.manejadores;

import co.srm.dao.JPAGenericDAO;
import co.srm.entidades.Empresa;
import co.srm.entidades.Rol;
import co.srm.entidades.Usuario;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 * @author TilZon
 */
public class ManejadorUsuario {

    private JPAGenericDAO<Usuario> daoUsuario;
    private JPAGenericDAO<Rol> daoPermisos;

    public ManejadorUsuario() {

        daoUsuario = new JPAGenericDAO<Usuario>(Usuario.class);
        daoPermisos = new JPAGenericDAO<Rol>(Rol.class);
    }

    public Usuario login(String user, String pass) {
        String query = "SELECT u FROM Usuario u WHERE u.login = '" + user + "' and u.clave = '" + pass + "'";
        List<Usuario> usuario = daoUsuario.get(query);

        if (usuario.size() > 0) {
            return usuario.get(0);
        } else {
            return null;
        }

    }

    public boolean crearUsuario(String idStr,String identificacionStr, Date fechaRegistro, String nombre, String apellidos, String telefono, String celular,String direccion,String nick, String contraseña, Rol rol,Empresa empresa,boolean editar) {
        int identificacion;
        Long id=null;
        Date registro = null;
        List<Rol> permisos = null;
        Usuario user=null;
        SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
        try {
            identificacionStr=(identificacionStr.isEmpty()?"0":identificacionStr);
            identificacion = Integer.parseInt(identificacionStr);
            if(editar)
                id=Long.parseLong(idStr);
            
//            registro = formato.parse(fechaRegistro);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
//        if (contraseña.equals("nuevo_password")) {
//            Usuario consultado = daoUsuario.getById(id);
//            contraseña = consultado.getClave();
//            permisos = consultado.getRoles();
//        } else {
            permisos = new ArrayList<Rol>();
//        }
        try {
            user = new Usuario();
//            Long idRolDig = new Long(idRol);
//            Rol r = daoPermisos.getById(idRolDig);
//            permisos.add(r);
//            user.setRoles(r);
             /**
             * Datos de la persona
             */
            user.setIdentificacion(identificacion);
            user.setNombres(nombre);
            user.setApellidos(apellidos);
            String direc = (direccion.isEmpty()?"No Suministrada":direccion);
            user.setDireccion(direc);
            user.setTelefono(telefono);
            user.setCelular(celular);
            user.setFechaCreacion(fechaRegistro);

            /**
             * Datos del usuario
             */
//            contraseña=
            user.setLogin(nick);
            user.setClave(contraseña);
            user.setEmpresa(empresa);
            user.setRoles(rol);
            
        } catch (Exception e) {
            e.printStackTrace();
        }



        boolean estado = daoUsuario.save(user);

        return estado;
    }

    public Usuario consultarUsuarioById(String idStr) {
        Long id = null;
        Usuario u = null;
        try {
            id = new Long(idStr);
        } catch (Exception e) {
            return null;
        }

        u = daoUsuario.getById(id);

        if (u != null) {
            return u;
        } else {
            return null;
        }
    }

    public  List<Usuario> consultarAllUsuarios() {
        List<Usuario> usuarios = daoUsuario.findAll();

        if(usuarios!=null)
        return usuarios;
        else
        return null;
    }

    public boolean actualizarUsuario(Usuario u) {
        boolean estado = daoUsuario.save(u);
        return estado;
    }

    public Usuario consultarUsuarioByIdentificacion(String identificacion) {
        Long cod = null;
        Usuario u= null;

        List<Usuario> usuarios = null;
        try {
            cod = new Long(identificacion.trim());
            usuarios = daoUsuario.get("SELECT u FROM Usuario u WHERE u.identificacion = " + cod);
            if (!usuarios.isEmpty()) {
                u = usuarios.get(0);
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        if (u != null) {
            return u;
        } else {
            return null;
        }
    }

}
